import pandas as pd
import numpy as np


# pandas重复值处理
# -- duplicated()函数：检查是否有重复值
# -- drop_duplicates()函数：删除重复值 的行

# 创建DataFrame
def create_df(index, columns):
    data = [[str(i) + str(j) for i in columns] for j in index]
    df = pd.DataFrame(data, index=index, columns=columns)
    return df


# 使用duplication()函数检查是否有重复行
# -- 返回元素为布尔类型的Series，True表示重复，False表示不重复
# -- 每个元素对应一行，如果该行不是第一次出现，则元素为True
df = create_df([1, 1, 2, 1], list('ABCD'))
print(df)
df1= df.copy()
print(df1.duplicated()) #重复行必须完全相同才能判断为重复
df1.iloc[1, 3] = 'DD' #修改重复行的值
print(df1)
print(df1.duplicated()) #修改后，不完全重复，重复行的元素变为False
print(df.duplicated(keep='first')) #保留第一次出现的重复值
print(df.duplicated(keep='last')) #保留最后一次出现的重复值
print(df.duplicated(keep=False)) #保留所有重复值
# subset参数：指定检查哪些列是否有重复值
print(df.duplicated(subset=['A', 'B']))
print(df.duplicated(subset=['A', 'B'], keep=False))


# -- drop_duplicates()函数：删除重复值 的行
print('\n删除重复值')
df2 = df.copy()
print(df2.duplicated())
print(df2.drop_duplicates())
print(df1.drop_duplicates(subset=['A', 'D']))












